package com.zhijian.medical.enums.diagnose.report;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 肺癌报告枚举
 */
@Slf4j
public class LungsEnum {

    /**
     * 术前辅助治疗
     */
    @AllArgsConstructor
    @Getter
    public enum PreoperativeAdjuvantTherapyEnum {
        //新辅助放疗 新辅助化疗 新辅助靶向治疗 新辅助联合放化疗 新辅助免疫治疗
        NEOADJUVANT_RADIOTHERAPY("neoadjuvant_radiotherapy", "新辅助放疗"),
        NEOADJUVANT_CHEMOTHERAPY("neoadjuvant_chemotherapy", "新辅助化疗"),
        NEOADJUVANT_TARGETED_THERAPY("neoadjuvant_targeted_therapy", "新辅助靶向治疗"),
        NEOADJUVANT_COMBINED_RADIOTHERAPY("neoadjuvant_combined_radiotherapy", "新辅助联合放化疗"),
        NEOADJUVANT_IMMUNOTHERAPY("neoadjuvant_immunotherapy", "新辅助免疫治疗");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PreoperativeAdjuvantTherapyEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }


    /**
     * 标本名称
     */
    @AllArgsConstructor
    @Getter
    public enum SampleNameEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOSIS_NEAR_END("anastomosis_near_end", "吻合口近端"),
        ANASTOMOSIS_REMOTE_END("anastomosis_remote_end", "吻合口远端");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SampleNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 术式
     */
    @AllArgsConstructor
    @Getter
    public enum OperationTypeEnum {
        //楔形切除 肺段切除 肺叶切除 根治性肺叶切除 袖式肺叶切除 双肺叶切除 全肺切除 主气道切除 其他 未标明
        WEDGE_RESECTION("wedge_resection", "楔形切除"),
        SEGMENTAL_RESECTION("segmental_resection", "肺段切除"),
        LUNG_RESECTION("lung_resection", "肺叶切除"),
        ROOT_RESECTION("root_resection", "根治性肺叶切除"),
        SLEEVE_LUNG_RESECTION("sleeve_lung_resection", "袖式肺叶切除"),
        DOUBLE_LUNG_RESECTION("double_lung_resection", "双肺叶切除"),
        WHOLE_LUNG_RESECTION("whole_lung_resection", "全肺切除"),
        MAIN_AIRWAY_RESECTION("main_airway_resection", "主气道切除"),
        OTHER("other", "其他"),
        NOT_SPECIFIED("not_specified", "未标明");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OperationTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 部位
     */
    @AllArgsConstructor
    @Getter
    public enum PartEnum {
        //右肺上叶 右肺中叶 右肺下叶 右肺中下叶 右肺上中叶 左肺上叶 左肺下叶 右全肺 左全肺
        RIGHT_UPPER_LOBE("right_upper_lobe", "右肺上叶"),
        RIGHT_MIDDLE_LOBE("right_middle_lobe", "右肺中叶"),
        RIGHT_LOWER_LOBE("right_lower_lobe", "右肺下叶"),
        RIGHT_MIDDLE_LOWER_LOBE("right_middle_lower_lobe", "右肺中下叶"),
        RIGHT_UPPER_MIDDLE_LOBE("right_upper_middle_lobe", "右肺上中叶"),
        LEFT_UPPER_LOBE("left_upper_lobe", "左肺上叶"),
        LEFT_LOWER_LOBE("left_lower_lobe", "左肺下叶"),
        RIGHT_WHOLE_LUNG("right_whole_lung", "右全肺"),
        LEFT_WHOLE_LUNG("left_whole_lung", "左全肺");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PartEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤大小
     */
    @AllArgsConstructor
    @Getter
    public enum TumorSizeEnum {

        S3("3.5x2.5", "3.5x2.5"),
        S20("20x16x3", "20x16x3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorSizeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalTypeEnum {
        //原位腺癌 腺癌 鳞癌 神经内分泌肿瘤 其他类型 涎腺型肿瘤 不确诊 癌前病变
        PRIMARY_ADE("primary_ade", "原位腺癌", HistologicalPrimaryAdeEnum.getList()),
        ADENOCARCINOMA("adenocarcinoma", "腺癌", HistologicalAdenocarcinomaEnum.getList()),
        SQUAMOUS_CELL("squamous_cell", "鳞癌", HistologicalSquamousCellEnum.getList()),
        NEUROENDOCRINE_TUMOR("neuroendocrine_tumor", "神经内分泌肿瘤", HistologicalNeuroendocrineTumorEnum.getList()),
        OTHER_TYPE("other_type", "其他类型", HistologicalOtherTypeEnum.getList()),
        SALIVARY_GLAND_TUMOR("salivary_gland_tumor", "涎腺型肿瘤", HistologicalSalivaryGlandTumorEnum.getList()),
        NOT_DIAGNOSED("not_diagnosed", "不确诊", HistologicalNotDiagnosedEnum.getList()),
        PRECANCEROUS("precancerous", "癌前病变", HistologicalPrecancerousEnum.getList());

        private final String key;
        private final String desc;
        private final List<MappingEnum<String, String>> child;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), e.getChild()))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-原位腺癌
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalPrimaryAdeEnum {
        //原位腺癌（AIS），非黏液性 原位腺癌（AIS），黏液性
        AIS_NON_MUCINOUS("AIS_non_mucinous", "原位腺癌（AIS），非黏液性"),
        AIS_MUCINOUS("AIS_mucinous", "原位腺癌（AIS），黏液性");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalPrimaryAdeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-腺癌
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalAdenocarcinomaEnum {
        //微浸润性腺癌，非黏液性 微浸润性腺癌，黏液性 浸润性非黏液性腺癌 浸润性黏液腺癌 浸润性黏液和非黏液混合型腺癌  胶样腺癌  胎儿型腺癌 肠型腺癌
        MINIMALLY_INVASIVE_ADE("minimally_invasive_ade", "微浸润性腺癌，非黏液性"),
        MINIMALLY_INVASIVE_ADE_MUCINOUS("minimally_invasive_ade_mucinous", "微浸润性腺癌，黏液性"),
        INVASIVE_ADE_NON_MUCINOUS("invasive_ade_non_mucinous", "浸润性非黏液性腺癌"),
        INVASIVE_ADE_MUCINOUS("invasive_ade_mucinous", "浸润性黏液腺癌"),
        INVASIVE_ADE_MIXED_MUCINOUS_NON_MUCINOUS("invasive_ade_mixed_mucinous_non_mucinous", "浸润性黏液和非黏液混合型腺癌"),
        GLANDULAR_ADE("glandular_ade", "胶样腺癌"),
        FETAL_ADE("fetal_ade", "胎儿型腺癌"),
        INTESTINAL_ADE("intestinal_ade", "肠型腺癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalAdenocarcinomaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-鳞癌
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalSquamousCellEnum {
        //原位鳞状细胞癌（SCIS）鳞状细胞癌 浸润性鳞状细胞癌，角化型 浸润性鳞状细胞癌，非角化型 浸润性鳞状细胞癌，基底细胞癌 淋巴上皮样癌
        SCIS("scis", "原位鳞状细胞癌（SCIS）"),
        SQUAMOUS_CELL_CANCER("squamous_cell_cancer", "鳞状细胞癌"),
        INVASIVE_SQUAMOUS_CELL_CANCER_KERATIN("invasive_squamous_cell_cancer_keratin", "浸润性鳞状细胞癌，角化型"),
        INVASIVE_SQUAMOUS_CELL_CANCER_NON_KERATIN("invasive_squamous_cell_cancer_non_keratin", "浸润性鳞状细胞癌，非角化型"),
        INVASIVE_SQUAMOUS_CELL_CANCER_BASE("invasive_squamous_cell_cancer_base", "浸润性鳞状细胞癌，基底细胞癌"),
        LYMPHOEPITHELIAL_SQUAMOUS_CELL_CANCER("lymphoepithelioid_squamous_cell_cancer", "淋巴上皮样癌");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalSquamousCellEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-神经内分泌肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalNeuroendocrineTumorEnum {
        //小细胞癌 复合性小细胞癌 大细胞神经内分泌癌 复合性大细胞神经内分泌癌 典型类癌/神经内分泌肿瘤，G1 非典型类癌/神经内分泌肿瘤，G2
        SMALL_CELL_CANCER("small_cell_cancer", "小细胞癌"),
        COMPOUND_SMALL_CELL_CANCER("compound_small_cell_cancer", "复合性小细胞癌"),
        LARGE_CELL_NEUROENDOCRINE_TUMOR("large_cell_neuroendocrine_tumor", "大细胞神经内分泌癌"),
        COMPOUND_LARGE_CELL_NEUROENDOCRINE_TUMOR("compound_large_cell_neuroendocrine_tumor", "复合性大细胞神经内分泌癌"),
        CLASSICAL_TYPE_CANCER_NEUROENDOCRINE_TUMOR("classical_type_cancer_neuroendocrine_tumor", "典型类癌/神经内分泌肿瘤，G1"),
        ATYPICAL_TYPE_CANCER_NEUROENDOCRINE_TUMOR("atypical_type_cancer_neuroendocrine_tumor", "非典型类癌/神经内分泌肿瘤，G2");


        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalNeuroendocrineTumorEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-其他类型
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalOtherTypeEnum {
        //大细胞癌 腺鳞癌 多形性癌 梭形细胞癌 巨细胞癌 癌肉瘤 肺母细胞瘤 NUT癌 SMARCA4基因缺陷型未分化肿瘤
        LARGE_CELL_CANCER("large_cell_cancer", "大细胞癌"),
        ADENOSQUAMOUS_CANCER("adenosquamous_cancer", "腺鳞癌"),
        POLYTYPE_CANCER("polytype_cancer", "多形性癌"),
        FIBROBLASTIC_CANCER("fibroblastic_cancer", "梭形细胞癌"),
        GIANT_CELL_CANCER("giant_cell_cancer", "巨细胞癌"),
        CANCEROUS_MELANOMA("cancerous_melanoma", "癌肉瘤"),
        PULMONARY_BONE_MARROW_TUMOR("pulmonary_bone_marrow_tumor", "肺母细胞瘤"),
        NUT_CANCER("nut_cancer", "NUT癌"),
        SMARCA4_GENE_DEFECTIVE_UNDIFFERENTIATED_TUMOR("smarca4_gene_defective_undifferentiated_tumor", "SMARCA4基因缺陷型未分化肿瘤");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalOtherTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 组织学类型-涎腺型肿瘤
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalSalivaryGlandTumorEnum {
        //多形性腺瘤 腺样囊性癌 上皮-肌上皮癌 黏液表皮样癌 透明细胞癌 肌上皮瘤 肌上皮癌
        POLYTYPE_ADENOMA("polytype_adenoma", "多形性腺瘤"),
        ADENOLYMPHATIC_CARCINOMA("adenolymphatic_carcinoma", "腺样囊性癌"),
        EPITHELIAL_MYOEPITHELIAL_CANCER("epithelial_myoepithelial_cancer", "上皮-肌上皮癌"),
        MUCOEPIDERMAL_CARCINOMA("mucoepidermoid_carcinoma", "黏液表皮样癌"),
        CLEAR_CELL_CARCINOMA("clear_cell_carcinoma", "透明细胞癌"),
        MYOEPITHELIOMA("myoepithelioma", "肌上皮瘤"),
        MYOEPITHELIOMA_CANCER("myoepithelioma_cancer", "肌上皮癌");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalSalivaryGlandTumorEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-不确诊
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalNotDiagnosedEnum {
        //癌，类型无法确定 非小细胞癌，亚型无法确定 未列出的其他组织学类型 待后续免疫组化和特殊染色助诊
        CANCER_TYPE_UNDETERMINED("cancer_type_undetermined", "癌，类型无法确定"),
        NON_SMALL_CELL_CANCER_SUBTYPE_UNDETERMINED("non_small_cell_cancer_subtype_undetermined", "非小细胞癌，亚型无法确定"),
        OTHER_ORGANIZED_TUMOR_TYPE_UNDETERMINED("other_organized_tumor_type_undetermined", "未列出的其他组织学类型"),
        WAITING_FOR_IMMUNOHISTOCHEMICAL_AND_SPECIAL_STAINING("waiting_for_immunohistochemical_and_special_staining", "待后续免疫组化和特殊染色助诊");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalNotDiagnosedEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 组织学类型-癌前病变
     */
    @AllArgsConstructor
    @Getter
    public enum HistologicalPrecancerousEnum {
        //非典型腺瘤样增生 弥漫性神经内分泌细胞增生 鳞状上皮异型增生 其他癌前病变
        ATYPICAL_ADENOMA("atypical_adenoma", "非典型腺瘤样增生"),
        DIFFUSE_NEUROENDOCRINE_CELL_PROLIFERATION("diffuse_neuroendocrine_cell_proliferation", "弥漫性神经内分泌细胞增生"),
        SQUAMOUS_CELL_EPITHELIAL_HYPERPLASIA("squamous_cell_epithelial_hyperplasia", "鳞状上皮异型增生"),
        OTHER_PRECANCEROUS("other_precancerous", "其他癌前病变");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(HistologicalPrecancerousEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分化程度
     */
    @AllArgsConstructor
    @Getter
    public enum DifferentiationDegreeEnum {
        //高分化 中分化 低分化
        HIGH("high", "高分化"),
        MIDDLE("middle", "中分化"),
        LOW("low", "低分化");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DifferentiationDegreeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 脉管瘤栓
     */
    @AllArgsConstructor
    @Getter
    public enum VesselTumorThrombusEnum {
        //未见癌栓 见癌栓 可疑 无法评估
        NOT_FOUND("not_found", "未见癌栓"),
        FOUND("found", "见癌栓"),
        SUSPECTED("suspected", "可疑"),
        UNEVALUABLE("unevaluable", "无法评估");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(VesselTumorThrombusEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 神经侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum NeurologicalInvasionEnum {

        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        VISIBLE("visible", "见侵犯"),
        SUSPICIOUS("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NeurologicalInvasionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 气腔播散（STAS）
     */
    @AllArgsConstructor
    @Getter
    public enum AirSpaceSpreadEnum {
        //未见 可见 可疑 无法评估
        NOT_YET_SEEN("not_yet_seen", "未见"),
        VISIBLE("visible", "可见"),
        SUSPECTED("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(AirSpaceSpreadEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 胸膜侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum PleuralInvasionEnum {
        //肺胸膜未见癌组织累及（PL0）癌组织侵犯超出胸膜弹力层（PL1）癌组织侵犯至胸膜表面（PL2）癌组织侵犯壁层胸膜（PL3）无法评估
        NOT_YET_SEEN("not_yet_seen", "肺胸膜未见癌组织累及（PL0）"),
        EXCEEDS_THE_PLEURAL_LAYER("exceeds_the_pleural_layer", "癌组织侵犯超出胸膜弹力层（PL1）"),
        REACHES_THE_PLEURAL_SURFACE("reaches_the_pleural_surface", "癌组织侵犯至胸膜表面（PL2）"),
        REACHES_THE_WALL_OF_THE_PLEURA("reaches_the_wall_of_the_pleura", "癌组织侵犯壁层胸膜（PL3）"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PleuralInvasionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 叶段支气管
     */
    @AllArgsConstructor
    @Getter
    public enum LeafSegmentalBronchusEnum {
        //累及叶支气管 累及段支气管 累及叶、段支气管 未累及叶、段支气管 不适用
        INVOLEVED_LEAF_BRONCHUS("involved_leaf_bronchus", "累及叶支气管"),
        INVOLEVED_SEGMENTAL_BRONCHUS("involved_segmental_bronchus", "累及段支气管"),
        INVOLEVED_LEAF_AND_SEGMENTAL_BRONCHUS("involved_leaf_and_segmental_bronchus", "累及叶、段支气管"),
        NOT_INVOLVED_LEAF_AND_SEGMENTAL_BRONCHUS("not_involved_leaf_and_segmental_bronchus", "未累及叶、段支气管"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LeafSegmentalBronchusEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肺外侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum LungExternalInvasionEnum {
        //未见侵犯 主支气管 壁层胸膜 胸壁 膈神经 心包壁层 膈肌 纵隔 心脏 大血管 气管 喉返神经 食道 椎体 隆突 其他
        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        MAIN_BRONCHUS("main_bronchus", "主支气管"),
        WALL_OF_THE_PLEURA("wall_of_the_pleura", "壁层胸膜"),
        PLEURAL_SURFACE("pleural_surface", "胸壁"),
        DIAPHRAGMIC_NERVE("diaphragmic_nerve", "膈神经"),
        PERICARDIAL_WALL("pericardial_wall", "心包壁层"),
        DIAPHRAGM("diaphragm", "膈肌"),
        MIDDLE("middle", "纵隔"),
        HEART("heart", "心脏"),
        LARGE_VESSEL("large_vessel", "大血管"),
        BRONCHUS("bronchus", "气管"),
        REVERSED_NERVE("reversed_nerve", "喉返神经"),
        ESOPHAGUS("esophagus", "食道"),
        VERTEBRA("vertebra", "椎体"),
        DORSAL("dorsal", "隆突"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LungExternalInvasionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 周围肺
     */
    @AllArgsConstructor
    @Getter
    public enum SurroundingLungEnum {
        //机化性肺炎 阻塞性肺炎 慢性肺炎 急性肺炎 肺不张 肺大疱 肺结核 肺气肿 肺内播散灶 未见特珠
        PULMONARY_ENZYMATIC_PNEUMONIA("pulmonary_enzymatic_pneumonia", "机化性肺炎"),
        OBSTRUCTIVE_PNEUMONIA("obstructive_pneumonia", "阻塞性肺炎"),
        CHRONIC_PNEUMONIA("chronic_pneumonia", "慢性肺炎"),
        ACUTE_PNEUMONIA("acute_pneumonia", "急性肺炎"),
        ATELECTASIS("atelectasis", "肺不张"),
        PLEURAL_BUBBLE("pleural_bubble", "肺大疱"),
        TUBERCULOSIS("tuberculosis", "肺结核"),
        PULMONARY_EDEMA("pulmonary_edema", "肺气肿"),
        PULMONARY_SPREAD_FOCUS("pulmonary_spread_focus", "肺内播散灶"),
        NOT_SPECIAL("not_special", "未见特珠");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SurroundingLungEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 切缘名称
     */
    @AllArgsConstructor
    @Getter
    public enum CutEdgeNameEnum {
        //支气管切缘 血管切缘 肺切缘
        BRONCHUS("bronchus", "支气管切缘"),
        BLOOD_VESSEL("blood_vessel", "血管切缘"),
        LUNG("lung", "肺切缘");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CutEdgeNameEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }


    /**
     * 切缘情况
     */
    @AllArgsConstructor
    @Getter
    public enum CutEdgeSituationEnum {
        //未见癌残留 癌组织累及 癌组织紧靠标本切缘 无法评估
        NOT_YET_SEEN("not_yet_seen", "未见癌残留"),
        CANCER_TISSUE_INVOLVED("cancer_tissue_involved", "癌组织累及"),
        CANCER_TISSUE_CLOSE_TO_THE_SAMPLE_CUT_EDGE("cancer_tissue_close_to_the_sample_cut_edge", "癌组织紧靠标本切缘"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(CutEdgeSituationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }


    /**
     * 淋巴结
     */
    @AllArgsConstructor
    @Getter
    public enum LymphGlandEnum {

        NOT_TRANSFERRED("not_transferred", "未见转移"),
        SEE_TRANSFER("see_transfer", "见转移"),
        ADIPOSE_TISSUE("adipose_tissue", "脂肪组织"),
        GRANULOMATOUS_INFLAMMATION("granulomatous_inflammation", "肉芽肿性炎"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LymphGlandEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 远处转移
     */
    @AllArgsConstructor
    @Getter
    public enum RemoteTransferEnum {
        //cM0临床无远处转移 M1a原发肿瘤对侧肺叶内有孤立的肿瘤结节 M1a胸膜播散（胸膜结节或恶性胸腔积液或心包积液）M1b远处单个器官单发转移（包括单个非区域淋巴结的转移）M1c多个器官或单个器官多处转移 Mx未知
        C_M0("cM0", "cM0临床无远处转移"),
        M_1A("M1a", "M1a原发肿瘤对侧肺叶内有孤立的肿瘤结节"),
        M_1A_1("M1a_1", "M1a胸膜播散（胸膜结节或恶性胸腔积液或心包积液）"),
        M_1B("M1b", "M1b远处单个器官单发转移（包括单个非区域淋巴结的转移）"),
        M_1C("M1c", "M1c多个器官或单个器官多处转移"),
        M_X("Mx", "Mx未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(RemoteTransferEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-TNM分期
     */
    @AllArgsConstructor
    @Getter
    public enum PathologicalStageTNMEnum {
        //yp p
        YP("yp", "yp"),
        P("p", "p");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PathologicalStageTNMEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 病理分期-T
     */
    @AllArgsConstructor
    @Getter
    public enum PathologicalStageTEnum {
        //Tx T0 Tis T1mi T1a T1b T1c T2 T2a T2b T3 T4
        TX("tx", "Tx"),
        T0("t0", "T0"),
        TIS("tis", "Tis"),
        T1MI("t1mi", "T1mi"),
        T1A("t1a", "T1a"),
        T1B("t1b", "T1b"),
        T1C("t1c", "T1c"),
        T2("t2", "T2"),
        T2A("t2a", "T2a"),
        T2B("t2b", "T2b"),
        T3("t3", "T3"),
        T4("t4", "T4");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PathologicalStageTEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }


    /**
     * 病理分期-N
     */
    @AllArgsConstructor
    @Getter
    public enum PathologicalStageNEnum {
        //Nx N0 N1 N2 N3
        NX("nx", "Nx"),
        N0("n0", "N0"),
        N1("n1", "N1"),
        N2("n2", "N2"),
        N3("n3", "N3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PathologicalStageNEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-M
     */
    @AllArgsConstructor
    @Getter
    public enum PathologicalStageMEnum {
        //Mx cM0 M1a M1b M1c
        MX("mx", "Mx"),
        C_M0("cM0", "cM0"),
        M_1A("M1a", "M1a"),
        M_1B("M1b", "M1b"),
        M_1C("M1c", "M1c");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PathologicalStageMEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-总分期
     */
    @AllArgsConstructor
    @Getter
    public enum PathologicalStageTotalEnum {
        N0("0", "0"),
        IA1("IA1", "IA1"),
        IA2("IA2", "IA2"),
        IA3("IA3", "IA3"),
        IB("IB", "IB"),
        IIA("IIA", "IIA"),
        IIB("IIB", "IIB"),
        IIIA("IIIA", "IIIA"),
        IIIB("IIIB", "IIIB"),
        IIIC("IIIC", "IIIC"),
        IVA("IVA", "IVA"),
        IVB("IVB", "IVB");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PathologicalStageTotalEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-表达式
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        PLUS2("++", "++"),
        PLUS3("+++", "+++"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-其他表达
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryOtherExpressionEnum {

        LYMPHOCYTE_EXPRESSION("lymphocyte_expression", "淋巴细胞表达"),
        VASCULAR_EXPRESSION("vascular_expression", "脉管表达"),
        IMMUNE_CELL_EXPRESSION("immune_cell_expression", "间质免疫细胞表达");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryOtherExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-表达式2
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpression2Enum {

        PLUS("+", "+"),
        REDUCE("-", "-");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpression2Enum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 原位杂交/特殊染色-分析结果
     */
    @AllArgsConstructor
    @Getter
    public enum InSituHybridizationExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        ZERO("0", "0"),
        PLUS1("1+", "1+"),
        PLUS2("2+", "2+"),
        PLUS3("3+", "3+"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InSituHybridizationExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分子检测-方法
     */
    @AllArgsConstructor
    @Getter
    public enum MolecularDetectionMethodEnum {
        //FISH PCR NGS
        FISH("FISH", "FISH"),
        PCR("PCR", "PCR"),
        NGS("NGS", "NGS");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MolecularDetectionMethodEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分子检测-结果
     */
    @AllArgsConstructor
    @Getter
    public enum MolecularDetectionResultEnum {
        //突变 未突变 未知
        MUTATION("mutation", "突变"),
        NOT_MUTATION("not_mutation", "未突变"),
        UNKNOWN("unknown", "未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MolecularDetectionResultEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());


        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 其他送检组织
     */
    @AllArgsConstructor
    @Getter
    public enum OtherInspectionOrganizationsEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOTIC_SITE_NEAR_END("anastomotic_site_near_end", "吻合口近端"),
        ANASTOMOTIC_SITE_REMOTE_END("anastomotic_site_remote_end", "吻合口远端");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OtherInspectionOrganizationsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


}
